﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.model.Instance;
using l1cs.server.serverpackets;
using l1cs.server.model;

namespace l1cs.server.clientpackets
{
    public class C_DropItem : ClientBasePacket
    {
        private static Logger _log = Logger.getLogger( typeof( C_DropItem ).FullName );
        private const String _C_DROP_ITEM = "[C] C_DropItem";

        public C_DropItem( byte[] decrypt, ClientThread client )
            : base( decrypt )
        {
            int x = readH();
            int y = readH();
            int objectId = readD();
            int count = readD();

            L1PcInstance pc = client.getActiveChar();
            if ( pc.isGhost() )
            {
                return;
            }

            L1ItemInstance item = pc.getInventory().getItem( objectId );
            if ( item != null )
            {
                if ( !item.getItem().isTradable() )
                {
                    // \f1%0は捨てたりまたは他人に讓ることができません。
                    pc.sendPackets( new S_ServerMessage( 210, item.getItem()
                            .getName() ) );
                    return;
                }

                //Object[] petlist = pc.getPetList().values().toArray();
                foreach ( Object petObject in pc.getPetList().Values )
                {
                    if ( petObject is L1PetInstance )
                    {
                        L1PetInstance pet = (L1PetInstance)petObject;
                        if ( item.getId() == pet.getItemObjId() )
                        {
                            // \f1%0は捨てたりまたは他人に讓ることができません。
                            pc.sendPackets( new S_ServerMessage( 210, item.getItem()
                                    .getName() ) );
                            return;
                        }
                    }
                }

                if ( item.isEquipped() )
                {
                    // \f1削除できないアイテムや装備しているアイテムは捨てられません。
                    pc.sendPackets( new S_ServerMessage( 125 ) );
                    return;
                }
                if ( item.getBless() >= 128 )
                { // 封印された装備
                    // \f1%0は捨てたりまたは他人に讓ることができません。
                    pc.sendPackets( new S_ServerMessage( 210, item.getItem()
                            .getName() ) );
                    return;
                }

                pc.getInventory().tradeItem( item, count,
                        L1World.getInstance().getInventory( x, y, pc.getMapId() ) );
                pc.turnOnOffLight();
            }
        }

        override
        public String getType()
        {
            return _C_DROP_ITEM;
        }
    }
}
